/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jclouds.jdbc.conversion;

import com.google.common.base.Function;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.MutableBlobMetadata;
import org.jclouds.io.ContentMetadata;
import org.jclouds.jdbc.entity.BlobEntity;
import org.jclouds.jdbc.entity.PayloadEntity;

public class BlobToBlobEntity implements Function<Blob, BlobEntity> {
   @Override
   public BlobEntity apply(Blob blob) {
      MutableBlobMetadata metadata = blob.getMetadata();
      ContentMetadata contentMetadata = metadata.getContentMetadata();
      PayloadEntity payload = PayloadEntity.builder()
            .contentDisposition(contentMetadata.getContentDisposition())
            .contentEncoding(contentMetadata.getContentEncoding())
            .contentLanguage(contentMetadata.getContentLanguage())
            .contentLength(contentMetadata.getContentLength())
            .contentMD5(contentMetadata.getContentMD5AsHashCode() == null ?
                  null :
                  contentMetadata.getContentMD5AsHashCode().asBytes())
            .contentType(contentMetadata.getContentType())
            .expires(contentMetadata.getExpires())
            .build();
      return BlobEntity.builder(null, null)
            .payload(payload)
            .userMetadata(metadata.getUserMetadata())
            .size(blob.getPayload().getContentMetadata().getContentLength())
            .build();
   }
}
